package com.example.demo.mapper;

import com.example.demo.model.Admin;
import com.example.demo.model.LoginUser;
import com.example.demo.model.Notice;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WJ
 * Date: 2023-02-17
 * Time: 21:34
 */
@Mapper
public interface AdminMapper {

    /**
     * 查询管理员的人数
     * @return 人数
     */
    List<LoginUser> getAdminTotal();

    /**
     * 查询除 adminId 之外的所有的管理员信息
     * @param adminId 管理员id
     * @return 一个存放管理员信息的list集合
     */
    List<Admin> getAdminList(@Param("adminid") Integer adminId);


    /**
     * 根据管理员名和密码查询管理员账号
     * @param phone      手机号
     * @return           管理员对象
     */
    LoginUser getAdminByNameAndPassword(@Param("phone") String phone,
                                        @Param("status") String status);

    /**
     * 通过adminId查询详细的管理员信息
     * @param id     管理员id
     */
    Admin getDetailAdminInfoById(Integer id);

    /**
     * 查询所有的人员基础信息
     * @return 所有人员的集合
     */
    List<LoginUser> getAllPersonInfo();


    /**
     * 获取所有的系统公告
     * @return 公告数据
     */
    List<Notice> getAllNotice();

    /**
     * 根据adminId查询管理员用户名
     * @return 用户名
     */
    String getAdminByID(@Param("adminid") Integer adminId);

    /**
     * 根据adminName查询adminId
     * @param adminName   管理员名字
     * @return            返回管理员的信息
     */
    LoginUser getIdByAdminName(@Param("admin_name") String adminName);


    /**
     * 通过评论人id获取评论人的信息
     * @param id  评论人id
     * @return    评论人信息
     */
    List<LoginUser> getAllCommentPersonInfo(Integer id);

    /**
     * 更新管理员信息(person)
     * @param id             id
     * @param username       用户名
     * @param password       密码
     * @param sex            性别
     * @param age            年龄
     * @param phone          手机号
     * @param url            头像
     */
    Integer updateAdminInfo(Integer id,
                            String username,
                            String password,
                            String sex,
                            Integer age,
                            String phone,
                            String url);

    /**
     * 更新管理员信息(admin_detail)
     * @param id          管理员id
     * @param address     地址
     */
    Integer updateAadminInfoInDetail(Integer id,
                                     String address);

    /**
     * 查询管理员信息(可以根据username来模糊查询，或者通过 phone，sex，age来精确查询)
     * @param username        用户名
     * @param phone           手机号
     * @param sex             性别
     * @param age             年龄
     * @return       结果集
     */
    List<Admin> getAllAdminByUsernameOrAgeD(@Param("adminid") Integer adminId,
                                            String username,
                                            String phone,
                                            String sex,
                                            Integer age);

    /**
     * 更新当前登录时间
     * @param id          id
     * @param newDate     当前的时间
     * @param oldDate     上一次登录的时间
     */
    Integer updateTimeById(Integer id,
                           String newDate,
                           String oldDate);


    /**
     * 通过 phone 获取 用户信息
     * @param phone  手机号
     */
    LoginUser getLoginUserInfoByPhoneForLogin(String phone);
}
